package com.utils;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.entity.Users;
import com.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.*;

@Component
public class handleToken {
    /** 1000分钟的token有效期（时间戳） */
    public static long expirationTime = 60000000;
    public handleToken() {
    }
    public static handleToken ahandleToken;
    @Autowired
    private UsersService usersService;
    @PostConstruct
    public void init() {
        ahandleToken = this;
        ahandleToken.usersService = this.usersService;
    }
    /** 传入userID和token，
     * 如果验证成功会返回所有users字段，不成功则会返回null引用
     * 需要用Users类型承接，利用getXXX（）方法调用数据
     * 调用示例：
     * // 校验token是否正确，不正确直接调用untoken状态码返回
     * Users logUser = handleToken.checkToken(userAccount, token);
     * if(logUser == null) return DataResult.untoken();
     */
    public static Users checkToken(String userAccount, String token) {
        QueryWrapper<Users> wrapper = new QueryWrapper<>();
        wrapper.eq("token", token);
        List<Users> users = ahandleToken.usersService.list(wrapper);
        // 判断条件拦截
        if (users.size() == 0) return null;// 判断是否无此token
        if (users.get(0).getIsdelete()) return null; // 判断是否被逻辑删除
        long nowTime = users.get(0).getTokenTime().getTime() + expirationTime;
        if (new Date().getTime() > nowTime) return null; // 判断token是否有效
        if (!Objects.equals(users.get(0).getUserAccount(), userAccount)) return null; // 判断token是否和传入的userAccount数据记录相符合
        // 成功返回对象
        return users.get(0);
    }
    public static String createToken() {
        return UUID.randomUUID().toString().replace("-", "");
    }
}